package cn.iocoder.yudao.module.crm.service.statistics;

import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessPageReqVO;
import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.customer.CrmCustomerPageReqVO;
import cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.CrmStatisticsIndexReqVO;
import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO;

import java.math.BigDecimal;
import java.util.List;

public interface CrmStatisticsIndexService {


    /**
     * 统计商机数量
     * @param reqVO
     * @since 2024-06-28
     * @author PetePower
     * @return
     */
    Long getBusinessCount(CrmStatisticsIndexReqVO reqVO);

    /**
     * 统计商机金额
     * @param reqVO
     * @since 2024-06-28
     * @author PetePower
     * @return
     */
    BigDecimal getBusinessAmount(CrmStatisticsIndexReqVO reqVO);

    /**
     * 统计合同数量
     * @param reqVO
     * @since 2024-06-28
     * @author PetePower
     * @return
     */
    Long getContractCount(CrmStatisticsIndexReqVO reqVO);

    /**
     * 统计合同金额
     * @param reqVO
     * @since 2024-06-28
     * @author PetePower
     * @return
     */
    BigDecimal getContractAmount(CrmStatisticsIndexReqVO reqVO);

    /**
     * 根据用户和时间，统计负责的客户数量
     * @param reqVO
     * @since 2024-06-28
     * @author PetePower
     * @return
     */
    Long getOwnCustomerCountByUserByDate(CrmStatisticsIndexReqVO reqVO);

    /**
     * 根据用户和时间，统计参与的客户数量
     * @param reqVO
     * @since 2024-06-28
     * @author PetePower
     * @return
     */
    Long getPartCustomerCountByUserByDate(CrmStatisticsIndexReqVO reqVO);

    /**
     * 根据用户和时间，统计已跟进客户数量
     * @param reqVO
     * @since 2024-06-28
     * @author PetePower
     * @return
     */
    Long getFollowedCustomerCountByUserByDate(CrmStatisticsIndexReqVO reqVO);

    /**
     * 根据用户和时间，统计已成交客户数量
     * @param reqVO
     * @since 2024-06-28
     * @author PetePower
     * @return
     */
    Long getDealCustomerCountByUserByDate(CrmStatisticsIndexReqVO reqVO);


    /**
     * 根据用户和时间，统计负责的线索数量
     * @param reqVO
     * @since 2024-06-28
     * @author PetePower
     * @return
     */
    Long getOwnClueCountByUserByDate(CrmStatisticsIndexReqVO reqVO);

    /**
     * 根据用户和时间，统计参与的线索数量
     * @param reqVO
     * @since 2024-06-28
     * @author PetePower
     * @return
     */
    Long getPartClueCountByUserByDate(CrmStatisticsIndexReqVO reqVO);

    /**
     * 根据用户和时间，统计已跟进线索数量
     * @param reqVO
     * @since 2024-06-28
     * @author PetePower
     * @return
     */
    Long getFollowedClueCountByUserByDate(CrmStatisticsIndexReqVO reqVO);

    /**
     * 根据用户和时间，统计已转化的线索数量
     * @param reqVO
     * @since 2024-06-28
     * @author PetePower
     * @return
     */
    Long getTransClueCountByUserByDate(CrmStatisticsIndexReqVO reqVO);

    List<Long> getUserIds(CrmStatisticsIndexReqVO reqVO);

}
